package ufc.qx.si.item1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import ufc.qx.si.Despesa;

public class DOMUtl {

	private static Document doc;
	private static Element tagDespesas;
	
	public static void iniciar(DocumentBuilder db){
		doc = db.newDocument();
		tagDespesas =  doc.createElement("Despesas");
		doc.appendChild(tagDespesas);
	}


	public static void addDespesa(Despesa despesa) throws Exception{

		Element tagDespesa = doc.createElement("Despesa");

		//Tags de despesa
		Element tagId = doc.createElement("id");
		Element tagSiglaUnidadeFederativa = doc.createElement("SiglaUnidadeFederativa");
		Element tagSiglaPartido = doc.createElement("SiglaPartido");
		Element tagDescricaoCargo = doc.createElement("DescricaoCargo");
		Element tagNomeCandidato = doc.createElement("NomeCandidato");
		Element tagNumeroCandidato = doc.createElement("NumeroCandidato");
		Element tagData = doc.createElement("Data");
		Element tagDocumentoFornecedor = doc.createElement("DocumentoFornecedor");
		Element tagSiglaUnidadeFederativaFornecedor = doc.createElement("SiglaUnidadeFederativaFornecedor");
		Element tagNomeFornecedor = doc.createElement("NomeFornecedor");
		Element tagValor = doc.createElement("Valor");
		Element tagTipoDespesa = doc.createElement("TipoDespesa");

		//Setando valores
		tagId.setTextContent(String.valueOf(despesa.getId()));
		tagSiglaUnidadeFederativa.setTextContent(despesa.getSiglaUnidadeFederativa());
		tagSiglaPartido.setTextContent(despesa.getSiglaPartido());
		tagDescricaoCargo.setTextContent(despesa.getDescricaoCampo());
		tagNomeCandidato.setTextContent(despesa.getNomeCandidato());
		tagNumeroCandidato.setTextContent(String.valueOf(despesa.getNumeroCandidato()));
		tagData.setTextContent(despesa.getData());
		tagDocumentoFornecedor.setTextContent(despesa.getDocumentoFornecedor());
		tagSiglaUnidadeFederativaFornecedor.setTextContent(despesa.getSiglaUnidadeFederativaFornecedor());
		tagNomeFornecedor.setTextContent(despesa.getNomeFornecedor());
		tagValor.setTextContent(String.valueOf(despesa.getValor()));
		tagTipoDespesa.setTextContent(despesa.getTipoDespesa());

		//Adicionando as tags filhas a tag despesa
		tagDespesa.appendChild(tagId);
		tagDespesa.appendChild(tagSiglaUnidadeFederativa);
		tagDespesa.appendChild(tagSiglaPartido);
		tagDespesa.appendChild(tagDescricaoCargo);
		tagDespesa.appendChild(tagNomeCandidato);
		tagDespesa.appendChild(tagNumeroCandidato);
		tagDespesa.appendChild(tagData);
		tagDespesa.appendChild(tagDocumentoFornecedor);
		tagDespesa.appendChild(tagSiglaUnidadeFederativaFornecedor);
		tagDespesa.appendChild(tagNomeFornecedor);
		tagDespesa.appendChild(tagValor);
		tagDespesa.appendChild(tagTipoDespesa);

		tagDespesas.appendChild(tagDespesa);

	}

	public static String converter() throws TransformerException {

		Transformer transformer = TransformerFactory.newInstance().newTransformer();

		transformer.setOutputProperty(OutputKeys.INDENT, "yes");

		//inicializar StreamResult para gravar para String
		StreamResult result = new StreamResult(new StringWriter());
		DOMSource source = new DOMSource(doc);
		transformer.transform(source, result);

		//Recupera o conteúdo em formato String
		String xmlString = result.getWriter().toString();

		//devolve a string
		return xmlString;
	}

	public static void salvarArquivo(String documento, File file) throws Exception {
		FileOutputStream fos = new FileOutputStream(file, true);
		fos.write(documento.getBytes());
		fos.flush();
		fos.close();
	}
	
}
